home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 1 / CU Amiga Magazine CD-ROM Special Edition (1995)(EMAP Images)(GB)[Issue 1995-11].iso / Aminet / comm / tcp / archie38_1.lha / archie-1.4 / vms / network.h < prev    next >
C/C++ Source or Header  |  1995-01-04  |  5KB  |  147 lines

  1. /* Miscellaneous things for the networking library.  */
  2.  
  3. /* Actually an itemlist_3, but can be used for itemlist_2's.  */
  4. struct itemlist
  5. {
  6.   short length;
  7.   short code;
  8.   char *dataptr;
  9.   short *retlenptr;
  10. };
  11.  
  12. union socket_addr
  13. {
  14.   struct sockaddr_in in;
  15. };
  16.  
  17. #define   TCP$SEND        (IO$_WRITEVBLK)
  18. #define   TCP$RECEIVE     (IO$_READVBLK)
  19. #define   TCP$OPEN        (IO$_CREATE)
  20. #define   TCP$CLOSE       (IO$_DELETE)
  21. #define   TCP$ABORT       (IO$_DEACCESS)
  22. #define   TCP$STATUS      (IO$_ACPCONTROL)
  23. #define   TCP$INFO        (IO$_MODIFY)
  24. #define   GTHST           (IO$_SKIPFILE)
  25.  
  26. #define   IO$_SEND        (IO$_WRITEVBLK)
  27. #define   IO$_RECEIVE     (IO$_READVBLK)
  28. #ifndef IO$S_FCODE
  29. #define IO$S_FCODE 0x0006
  30. #endif
  31. #define   IO$_SOCKET      (IO$_ACCESS | (0 << IO$S_FCODE))
  32. #define   IO$_BIND        (IO$_ACCESS | (1 << IO$S_FCODE))
  33. #define   IO$_LISTEN      (IO$_ACCESS | (2 << IO$S_FCODE))
  34. #define   IO$_ACCEPT      (IO$_ACCESS | (3 << IO$S_FCODE))
  35. #define   IO$_CONNECT     (IO$_ACCESS | (4 << IO$S_FCODE))
  36. #define   IO$_SETSOCKOPT  (IO$_ACCESS | (5 << IO$S_FCODE))
  37. #define   IO$_GETSOCKOPT  (IO$_ACCESS | (6 << IO$S_FCODE))
  38. #define   IO$_IOCTL       (IO$_ACCESS | (8 << IO$S_FCODE))
  39. #define   IO$_ACCEPT_WAIT (IO$_ACCESS | (10 << IO$S_FCODE))
  40. #define   IO$_NETWORK_PTY (IO$_ACCESS | (11 << IO$S_FCODE))
  41. #define   IO$_SHUTDOWN    (IO$_ACCESS | (12 << IO$S_FCODE))
  42. #define   IO$_GETSOCKNAME (IO$_ACCESS | (13 << IO$S_FCODE))
  43. #define      SETCHAR_HANDOFF (1<<2)
  44.  
  45. #define   NFB$C_DECLNAME   0x15
  46.  
  47. #define TIMER_EFN 1
  48. #define TERM_EFN  2
  49. #define BUF_SIZE 2000
  50.  
  51. #define INITIALISED 0
  52. #define ACTIVE_CONNECTION 1
  53. #define PASSIVE_CONNECTION 2
  54. #define LISTENING 3
  55. #define HANDED_OFF 4
  56.  
  57. static struct fd_entry
  58. {
  59.   unsigned short int channel;    /* vms channel assigned to this socket */
  60.   unsigned short int iosb[4];    /* returned status block */
  61.   int fd_buff_size;        /* number of chrs in buffer still to be read */
  62.   int accept_pending;        /* a call is waiting to be accepted */
  63.   int connect_pending;        /* a connect is outstanding*/
  64.   int connected;        /* this descriptor is connected */
  65.   unsigned char *fd_buff;    /* pointer to buffer dyn assigned */
  66.   unsigned char *fd_leftover;    /* pointer to any chrs still to be read */
  67.   FILE *fptr;            /* we need to assgn a file ptr for stream io */
  68.   int s;            /* socket number - needed in the ast's */
  69.   int namelen;            /* our socket address name */
  70.   union socket_addr name;
  71.   short int fromdummy;        /* wg - accept wants an int - recvfrom wants a short!!*/
  72.   short int fromlen;        /* the from socket address name */
  73.   union socket_addr from;
  74.   int tolen;            /* wg - sendto wants an int*/
  75.   union socket_addr to;        /* the to socket address name */
  76.   int passive;            /* still needed because of x25 close ambig */
  77.   int backlog;            /* backlog - not handled well! */
  78.   int domain;            /* domain of socket AF_INET or AF_X25 */
  79.   int type;            /* type of socket stream or datagram */
  80.   int protocol;            /* protocol of socket - ignored */
  81.   int mbx_channel;        /* mailbox channel - needed for x25 */
  82.   unsigned char mbx_buff[255];    /* mailbox buffer */
  83.   unsigned short int miosb[4];    /* mailbox status block */
  84.   int ncb_size;            /* x25 connection information */
  85.   unsigned char ncb[128];
  86.   unsigned char masklen;    /* x25 user data mask */
  87.   unsigned char mask[16];
  88.   int need_header;        /* x25 header field gives data status if req*/
  89.   int send_type;        /* x25 data packet type eg more bit set etc */
  90.   int status;            /* status of socket */
  91.   int closed_by_remote;        /* flag for remote dropouts */
  92.   int read_outstanding;        /* flag so we don't hang two reads */
  93.   int cmu_open;            /* flag to say whether a cmu open was hung */
  94.   int x25_listener;        /* flag to say we are an x25 listener */
  95.   int oob_type;            /* handles interrupt messages */
  96.   int mother;            /* mother socket for X25 accepts */
  97.   int child;            /* child socket for X25 accepts */
  98.   int no_more_accepts;        /* don't accept anymore calls */
  99.   char int_data;        /* interrupt data - only 1 char supported */
  100.   int non_blocking;        /* don't block on a read if no data */
  101.   int sig_req;            /* generate SIGIO on data ready */
  102.   struct itemlist rhost;    /* descriptor pointing to "p[].from" info for UCX */
  103.   unsigned short ucx_accept_chan;    /* Channel returned by a UCX accept via hang_an_accept */
  104. } p[32];
  105.  
  106. /* So we can handle select on terminal input.  */
  107. static struct term_entry
  108. {
  109.   int chan;
  110.   short int iosb[4];
  111.   short int char_available;
  112.   short int read_outstanding;
  113.   char c[1];
  114. } terminal =
  115.  
  116. {
  117.   -1, 0, 0, 0, 0, 0, 0
  118. };
  119.  
  120. #define CMU 1
  121. #define WG  2
  122. #define NONE 3
  123. #define TGV 4
  124. #define UCX 5
  125. static int tcp_make = 0;
  126.  
  127. struct descriptor
  128. {
  129.   int size;
  130.   char *ptr;
  131. };
  132.  
  133. /* Initialize certain things 1st time thru.  */
  134. static int p_initialised = 0;
  135.  
  136. /* A routine to point SIGALRM and SIGURG at.  */
  137. static int 
  138. si_dummy ()
  139. {
  140. }
  141. static int (*alarm_function) () = si_dummy;
  142. static int (*sigurg_function) () = si_dummy;
  143.  
  144. FILE *fdopen ();
  145. static set_tcp_make ();
  146. static char *getdevicename ();
  147.